
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>

extern char** environ;
char* my = "wusaqi=12345";

int main()
{
    pid_t id = fork();
    if(id == 0)
    {
        //子进程
        char* const myargv[] = {"wusaqi", "cmd", NULL};
        putenv(my);
        execvpe("./mycmd", myargv, environ);
        exit(0);
    }
    //父进程
    pid_t rid = waitpid(id, NULL, 0);
    if(rid > 0)
    {
        printf("wait: %d success\n", rid);
    }
    return 0;
}


//int main()
//{
//    pid_t id = fork();
//    if(id == 0)
//    {
//        //子进程
//        sleep(2);
//        printf("我是一个进程：%d\n", getpid());
//        sleep(1);
//        execl("./mycmd", "./mycmd",  NULL);
//        exit(1);
//    }
//    //父进程
//    pid_t rid = waitpid(id, NULL, 0);
//    if(rid > 0)
//    {
//        printf("wait: %d success\n", rid);
//    }
//    return 0;
//}


//#include <stdio.h>
//#include <unistd.h>
//#include <stdlib.h>
//#include <sys/types.h>
//#include <sys/wait.h>
//
//int main()
//{
//    pid_t id = fork();
//    if(id == 0)
//    {
//        //子进程
//        sleep(2);
//        printf("我是一个进程：%d\n", getpid());
//        sleep(1);
//        execl("/usr/bin/ls", "ls", "-a", "-l", NULL);
//        exit(1);
//    }
//    //父进程
//    pid_t rid = waitpid(id, NULL, 0);
//    if(rid > 0)
//    {
//        printf("wait: %d success\n", rid);
//    }
//    return 0;
//}


//int main()
//{
//    printf("我是一个进程: %d\n", getpid());
//    sleep(1);
//    char* const argv[] = { 
//        (char*)"ls", 
//        (char*)"-a", 
//        (char*)"-l", 
//        (char*)"-n", 
//        NULL 
//    };
//    execvp("ls", argv);
//    printf("程序替换失败！\n");
//    return 10;
//}

//int main()
//{
//    printf("我是一个进程: %d\n", getpid());
//    sleep(1);
//
//    execlp("ls", "ls", "-a", "-l", "-n", NULL);
//
//    printf("程序替换失败！\n");
//    return 10;
//}

//int main(int argc, char* argv[])
//{
//    printf("我是一个进程: %d\n", getpid());
//    sleep(1);
//
//    char** myargv = &argv[1];
//    execv(myargv[0], myargv);
//
//    printf("程序替换失败！\n");
//    return 10;
//}



//int main()
//{
//    printf("我是一个进程: %d\n", getpid());
//    sleep(1);
//
//    //"/usr/bin/pwd"本事是const char*类型，需要把它强转为char*类型以匹配char* const类型的myargv数组
//    char* const myargv[] = {(char*)"/usr/bin/pwd", NULL};
//
//    execv("/usr/bin/pwd", myargv);
//
//    //execl("/usr/bin/lllls", "ls", "-a", "-l", "-n", NULL);
//
//    printf("程序替换失败！\n");
//    return 10;
//}
